Vue.prototype.$http = {
  //get请求
  get(url, callback) {
    axios.get(url).then(res => {
      if (res.data.status == 200) {
        callback(res)
      } else {
        callback('骂后台去')
      }
    })
  },
  //post请求
  post(url, obj, callback) {
    axios.post(url, obj).then(res => {
      if (res.data.status == 200) {
        callback(res)
      } else {
        callback('骂后台去')
      }
    })
  }
};

// 判断code过期退出登陆
axios.interceptors.response.use(
  res => {
    if (res.data.code == -10) {
      localStorage.removeItem('token')
      router.push({ path: '/login' })
      Message({
        type: 'error',
        message: '登陆超时,请重新登陆'
      })
    }
    return res
  },
  err => {
    if (err && err.response) {
      switch (err.response.status) {
        case 400:
          console.log('错误请求')
          break;
        case 401:
          console.log('未授权，请重新登录')
          break;
        case 403:
          console.log('拒绝访问')
          break;
        case 404:
          console.log('请求错误,未找到该资源')
          break;
        case 405:
          console.log('请求方法未允许')
          break;
        case 408:
          console.log('请求超时')
          break;
        case 500:
          console.log('服务器端出错')
          break;
        case 501:
          console.log('网络未实现')
          break;
        case 502:
          console.log('网络错误')
          break;
        case 503:
          console.log('服务不可用')
          break;
        case 504:
          console.log('网络超时')
          break;
        case 505:
          console.log('http版本不支持该请求')
          break;
        default:
          console.log(`连接错误${err.response.status}`)
      }
    } else {
      console.log('连接到服务器失败')
    }
    return Promise.resolve(err.response)
  }
)

//axios实现所有请求自动携带token
axios.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么
    // store.getters.token ||
    let token = localStorage.getItem('token')
    if (token) {
      // config.headers['userid'] = userid
      // 让每个请求携带token--['X-Token']为自定义key 请根据实际情况自行修改
      config.headers['Token'] = token
    }
    return config;
  },
  error => {
    // 对请求错误做些什么
    Promise.reject(error);
  }
)

//router实现登陆拦截
router.beforeEach((to, from, next) => {
  let token = localStorage.getItem('token'),
    allowBack = true;
  if (!token && to.path !== '/login') {
    return next({ path: '/login' })
  }
  if (to.meta.allowBack !== undefined) {
    allowBack = to.meta.allowBack
  }
  if (!allowBack) {
    history.pushState(null, null, location.href)
  }
  next()
});
